package com.whosly.mysql.protocol.packet.jdbc;

import lombok.Getter;

/**
 * MYSQL 字段类型及标识定义枚举
 *
 * @see  FieldsProtocol
 * @see  FieldsProtocolType
 */
public enum FieldsProtocolType {

    /** field data type */
    FIELD_TYPE_DECIMAL(FieldsProtocol.FIELD_TYPE_DECIMAL),
    FIELD_TYPE_TINY(FieldsProtocol.FIELD_TYPE_TINY),
    FIELD_TYPE_SHORT(FieldsProtocol.FIELD_TYPE_SHORT),
    FIELD_TYPE_LONG(FieldsProtocol.FIELD_TYPE_LONG),
    FIELD_TYPE_FLOAT(FieldsProtocol.FIELD_TYPE_FLOAT),
    FIELD_TYPE_DOUBLE(FieldsProtocol.FIELD_TYPE_DOUBLE),
    FIELD_TYPE_NULL(FieldsProtocol.FIELD_TYPE_NULL),
    FIELD_TYPE_TIMESTAMP(FieldsProtocol.FIELD_TYPE_TIMESTAMP),
    FIELD_TYPE_LONGLONG(FieldsProtocol.FIELD_TYPE_LONGLONG),
    FIELD_TYPE_INT24(FieldsProtocol.FIELD_TYPE_INT24),
    FIELD_TYPE_DATE(FieldsProtocol.FIELD_TYPE_DATE),
    FIELD_TYPE_TIME(FieldsProtocol.FIELD_TYPE_TIME),
    FIELD_TYPE_DATETIME(FieldsProtocol.FIELD_TYPE_DATETIME),
    FIELD_TYPE_YEAR(FieldsProtocol.FIELD_TYPE_YEAR),
    FIELD_TYPE_NEWDATE(FieldsProtocol.FIELD_TYPE_NEWDATE),
    FIELD_TYPE_VARCHAR(FieldsProtocol.FIELD_TYPE_VARCHAR),
    FIELD_TYPE_BIT(FieldsProtocol.FIELD_TYPE_BIT),
    FIELD_TYPE_NEW_DECIMAL(FieldsProtocol.FIELD_TYPE_NEW_DECIMAL),
    FIELD_TYPE_ENUM(FieldsProtocol.FIELD_TYPE_ENUM),
    FIELD_TYPE_SET(FieldsProtocol.FIELD_TYPE_SET),
    FIELD_TYPE_TINY_BLOB(FieldsProtocol.FIELD_TYPE_TINY_BLOB),
    FIELD_TYPE_MEDIUM_BLOB(FieldsProtocol.FIELD_TYPE_MEDIUM_BLOB),
    FIELD_TYPE_LONG_BLOB(FieldsProtocol.FIELD_TYPE_LONG_BLOB),
    FIELD_TYPE_BLOB(FieldsProtocol.FIELD_TYPE_BLOB),
    FIELD_TYPE_VAR_STRING(FieldsProtocol.FIELD_TYPE_VAR_STRING),
    FIELD_TYPE_STRING(FieldsProtocol.FIELD_TYPE_STRING),
    FIELD_TYPE_GEOMETRY(FieldsProtocol.FIELD_TYPE_GEOMETRY),
    ;

    @Getter
    private int type;

    FieldsProtocolType(int type){
        this.type = type;
    }

    public static FieldsProtocolType of(int protocolType) {
        for (FieldsProtocolType type : values()) {
            if (protocolType == type.getType()) {
                return type;
            }
        }

        return null;
    }

}
